﻿Imports TNCBAL
Imports TNCDAL

Public Class ucFileMBL
    'Các đối tượng
    Private _objFileMBL As tblFileMBL
    Private _objFile As tblFile ' Thông tin File

    'Các đối tượng controller
    Private _objFileMBLController As New FileMBLController

    Public Sub New(ByVal obj As tblFile)
        InitializeComponent()
        'Lưu thông tin File
        _objFile = obj

        'InitCommands()
    End Sub

    Private Sub ucFileMBL_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        InitMBLData()
        If _objFile IsNot Nothing Then
            _objFileMBL = _objFileMBLController.GetMBLByFile(_objFile.ID_File)
            If _objFileMBL IsNot Nothing Then
                'Hiển thị thông tin chi tiết của FileMBL trên form
                FillFileMBLDetails(_objFileMBL.tblMBL)
            End If
        End If
    End Sub

    ''' <summary>
    ''' Khởi tạo dữ liệu mặc định trên form
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub InitMBLData()
        ''Load danh sách MBL No. thỏa điều kiện lọc để làm auto complete
        'Dim objMBLController As New MBLController
        'Dim remainMbl As IQueryable(Of tblMBL) = objMBLController.GetRemainMBLList(_objFile.ID_File)

        ''Auto complete
        'Dim source = New AutoCompleteStringCollection()
        'Dim mblNoList = From p In remainMbl.AsQueryable()
        '                Select p.MBLNo
        'source.AddRange(mblNoList.ToArray())

        ''Textbox MBLNo
        'txtMBLNo.AutoCompleteSource = AutoCompleteSource.CustomSource
        'txtMBLNo.AutoCompleteCustomSource = source
        'txtMBLNo.AutoCompleteMode = AutoCompleteMode.SuggestAppend


        'POL
        Dim objPortController As New CPortController
        cmbPOL.ValueMember = "ID_Port"
        cmbPOL.DisplayMember = "Port"
        cmbPOL.DataSource = (From p In objPortController.SelectAllRecord()
                            Select p).OrderBy(Function(p) p.Port)

        'POD
        cmbPOD.ValueMember = "ID_Port"
        cmbPOD.DisplayMember = "Port"
        cmbPOD.DataSource = (From p In objPortController.SelectAllRecord()
                            Select p).OrderBy(Function(p) p.Port)

        'Line
        Dim dc As New TanNamChinhDataContext
        cmbLine.ValueMember = "ID_Line"
        cmbLine.DisplayMember = "LineName"
        cmbLine.DataSource = (From p In dc.tblLines
                             Select p).OrderBy(Function(p) p.LineName)

        'Vessel
        'Ngày 14-11-2013: thực tế Line và Vessel độc lập nên load độc lập
        cmbVessel.ValueMember = "ID_Vessel"
        cmbVessel.DisplayMember = "VesselName"
        cmbVessel.DataSource = (From q In dc.tblVessels
                               Select q).OrderBy(Function(p) p.VesselName)
    End Sub

    ''' <summary>
    ''' Kiểm tra POL phải khác POD
    ''' Kiểm tra ETD phải khác ETA
    ''' Kiểm tra tồn tại VoyageNo
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function CheckMBLLogic() As Boolean
        'Nếu chưa tạo FileMBL (MBLNO = "") thì bỏ qua
        If txtMBLNo.Text = "" Then
            Return True
        End If

        If cmbPOD.SelectedValue = cmbPOL.SelectedValue Then
            MessageBox.Show("POD và POL phải khác nhau")
            Return False
        End If

        If txtVoyageNo.Text = "" Then
            MessageBox.Show("Voyage No chưa có")
            txtVoyageNo.Focus()
            Return False
        End If
        Return True
    End Function

    ''' <summary>
    ''' Lưu thông tin hiển thị trên form vào các object cụ thể
    ''' Kiểm tra nếu chưa có thì tạo mới FileMBL rồi tạo mới MBL và Voyage của MBL
    ''' Nếu tồn tại rồi thì cập nhật chỉ các giá trị chỉnh sửa trên form
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub GetMBLInfoByForm()
        'Kiểm tra nếu File chưa có MBL rồi thì khởi tạo mới
        If _objFileMBL Is Nothing Then
            'Khởi tạo tblFileMBL
            _objFileMBL = New tblFileMBL()
            _objFileMBL.ID_File = _objFile.ID_File

            'Khởi tạo tblMBL trong tblFileMBL
            _objFileMBL.tblMBL = New tblMBL()
            'Khởi tạo tblVoyage trong tblMBL
            _objFileMBL.tblMBL.tblVoyage = New tblVoyage()
        End If

        'Lưu thông tin trên form vào object
        _objFileMBL.tblMBL.MBLNo = txtMBLNo.Text
        _objFileMBL.tblMBL.tblVoyage.VoyageNo = txtVoyageNo.Text
        _objFileMBL.tblMBL.tblVoyage.ID_Line = cmbLine.SelectedValue
        _objFileMBL.tblMBL.tblVoyage.ID_Vessel = cmbVessel.SelectedValue
        _objFileMBL.tblMBL.tblVoyage.ID_POD = cmbPOD.SelectedValue
        _objFileMBL.tblMBL.tblVoyage.ID_POL = cmbPOL.SelectedValue
        _objFileMBL.tblMBL.tblVoyage.ETD = dtETDDate.Value
        _objFileMBL.tblMBL.tblVoyage.ETA = dtETADate.Value

    End Sub

    Public Property ObjectFile As tblFile
        Get
            Return _objFile
        End Get
        Set(ByVal value As tblFile)
            _objFile = value
        End Set
    End Property

#Region "Commands"
    'Private _ucCommands As ucCommands

    ' ''' <summary>
    ' ''' Init commands
    ' ''' </summary>
    ' ''' <remarks></remarks>
    'Public Sub InitCommands()
    '    _ucCommands = New ucCommands(Me)
    '    _ucCommands.ShowHideButtons(False, True, True)
    '    '_ucCommands.btnAddEvent_Click = New EventHandler(AddressOf btnAdd_Click)
    '    _ucCommands.btnEditEvent_Click = New EventHandler(AddressOf btnEdit_Click)
    '    _ucCommands.btnDeleteEvent_Click = New EventHandler(AddressOf btnDel_Click)
    '    _ucCommands.btnUpdateEvent_Click = New EventHandler(AddressOf btnUpdate_Click)
    '    _ucCommands.btnCancelEvent_Click = New EventHandler(AddressOf btnCancel_Click)
    '    _ucCommands.Dock = DockStyle.Fill
    '    PanelExCommand.Controls.Add(_ucCommands)
    'End Sub

    'Public Sub FocusControl()
    '    txtMBLNo.Focus()
    '    txtMBLNo.SelectionLength = 0
    'End Sub

    'Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    '    'EnableButtons(True)
    '    'InitNewMBL()
    '    FocusControl()
    'End Sub

    'Public Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

    '    'EnableButtons(True)
    '    'FocusControl()
    'End Sub


    Public Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try

            'Kiểm tra tính logic
            'If Not CheckLogic() Then
            '    _ucCommands.EnableButtons(True)
            '    Exit Sub
            'End If

            'Lấy thông tin trên form lưu vào đối tượng
            GetMBLInfoByForm()

            Dim action As enumAction

            'Lưu current row index hiện tại
            Dim indexRow As Integer = -1

            'Nếu tồn tại ID_FileMBL thì cập nhật
            If _objFileMBL.ID_FileMBL > 0 Then
                _objFileMBLController.Update(_objFileMBL)
                action = enumAction.Edit
            Else 'Không tồn tại thì thêm mới
                _objFileMBLController.Insert(_objFileMBL)
                action = enumAction.Add
            End If

            'Write log
            Dim objLogController As New LogController
            objLogController.Insert(action, String.Format("MBL ({0}) of File {1}", _objFileMBL.tblMBL.MBLNo, _objFile.FileNo))
        Catch ex As Exception
#If DEBUG Then
            Throw ex
#Else
            MessageBox.Show(ex.Message)
#End If
        End Try
    End Sub

    'Private Sub btnDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    '    'If MessageBox.Show("Bạn thật sự muốn xóa dữ liệu này?", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
    '    '    Dim indexRow As Integer = _ucGridView.DataGridView.CurrentRow.Index - 1
    '    '    _objFileMBLController.Delete(_objFileMBL)
    '    '    _ucGridView.BindingDataGridView(_objFile, indexRow)
    '    '    'MessageBox.Show("Complete!")
    '    'End If
    'End Sub

    'Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    '    'EnableButtons(False)
    'End Sub

#End Region

    ''' <summary>
    ''' Hiển thị chi tiết FileMBL trên form
    ''' </summary>
    ''' <param name="objMBL"></param>
    ''' <remarks></remarks>
    Private Sub FillFileMBLDetails(ByVal objMBL As tblMBL)
        txtMBLNo.Text = objMBL.MBLNo
        'Hiển thị Line
        Try
            cmbLine.SelectedValue = objMBL.tblVoyage.ID_Line
        Catch ex As Exception
#If DEBUG Then
            Throw ex
#Else
            cmbLine.SelectedIndex = -1
#End If


        End Try

        'Hiển thị Vessel
        Try
            cmbVessel.SelectedValue = objMBL.tblVoyage.ID_Vessel
        Catch ex As Exception
#If DEBUG Then
            Throw ex
#Else
            cmbVessel.SelectedIndex = -1
#End If
        End Try

        'Hiển thị Voyage
        FillVoyageDetails(objMBL.tblVoyage)
    End Sub

    ''' <summary>
    ''' Load thông tin Voyage vào form
    ''' </summary>
    ''' <param name="objVoyage"></param>
    ''' <remarks></remarks>
    Private Sub FillVoyageDetails(ByVal objVoyage As tblVoyage)
        Try
            txtVoyageNo.Text = objVoyage.VoyageNo
            cmbPOL.SelectedValue = objVoyage.ID_POL
            cmbPOD.SelectedValue = objVoyage.ID_POD
            dtETDDate.Value = objVoyage.ETD.Value
            dtETDTime.Value = objVoyage.ETD.Value
            dtETADate.Value = objVoyage.ETA.Value
            dtETATime.Value = objVoyage.ETA.Value
        Catch ex As Exception
#If DEBUG Then
            Throw ex
#Else
            MessageBox.Show("Lỗi load thông tin Voyage")
#End If
        End Try

    End Sub


End Class
